/*!
 * Copyright (c) 2013-Now http://jeesite.com All rights reserved.
 * 
 * 通用公共JavaScript，注意：项目请不要修改公共CSS样式，若需要新增或调整，请在common.js中覆盖
 * @author ThinkGem
 * @version 2017-4-18
 */
if (typeof jQuery === "undefined") {
  throw new Error("JeeSite's JavaScript requires jQuery")
} (function($, window, undefined) {
  $(function() {
    if ($.fn.iCheck !== undefined) {
      $("input[type=checkbox].form-control:not(.noicheck),input[type=radio].form-control:not(.noicheck)").each(function() {
        $(this).iCheck({
          checkboxClass: "icheckbox_" + ($(this).data("style") || "minimal-grey"),
          radioClass: "iradio_" + ($(this).data("style") || "minimal-grey")
        }).on("ifChanged",
        function() {
          try {
            $(this).valid()
          } catch(e) {}
        })
      })
    }
    if ($.fn.select2 !== undefined) {
      $("select.form-control:not(.noselect2)").each(function() {
        $(this).select2({
          minimumResultsForSearch: 10
        }).on("change",
        function() {
          try {
            $(this).valid()
          } catch(e) {}
        })
      })
    }
    if (js.ie) {
      $("a").bind("focus",
      function() {
        if (this.blur) {
          this.blur()
        }
      })
    }
    $("#inputForm input[type=text]:not([readonly]):not([disabled]):not(.nofocus):eq(0)").focus();
    $("textarea.autoHeight").textareaAutoHieght();
    $(document).on("click", ".addTabPage",
    function(e) {
      var $this = $(this),
      href = $this.data("href"),
      title = $this.data("title") || $this.attr("title") || $this.text();
      if (href && href != "" && href != "blank") {
        js.addTabPage($this, $.trim(title || js.text("tabpanel.newTabPage")), href, null, true, false);
        if ($this.parent().hasClass("treeview")) {
          window.location.hash = href.replace("#", "")
        }
        return false
      }
      return true
    });
    if (js.ie && js.ie <= 9) {
      setTimeout(function() {
        $("input[placeholder],textarea[placeholder]").placeholder()
      },
      500)
    }
    if ($("#scroll-up").length > 0) {
      var btnScrollTop = $("#scroll-up"),
      isVisible = false;
      $(window).on("scroll.btnScrollTop",
      function() {
        var scroll = $(document).scrollTop(),
        h = $(window).height(),
        sh = document.body.scrollHeight;
        if (scroll > parseInt(h / 4) || (scroll > 0 && sh >= h && h + scroll >= sh - 1)) {
          if (!isVisible) {
            btnScrollTop.addClass("display");
            isVisible = true
          }
        } else {
          if (isVisible) {
            btnScrollTop.removeClass("display");
            isVisible = false
          }
        }
      }).triggerHandler("scroll.btnScrollTop");
      btnScrollTop.on("click",
      function() {
        $("html,body").animate({
          scrollTop: 0
        },
        500);
        return false
      })
    }
    if (typeof FastClick != "undefined") {
      FastClick.attach(document.body)
    }
  });
  var js = {
    log: function(msg) {
      if (typeof(console) !== "undefined") {
        console.log(msg)
      }
    },
    error: function(msg) {
      if (typeof(console) !== "undefined") {
        console.error(msg)
      }
    },
    encodeUrl: function(url) {
      return encodeURIComponent(url)
    },
    decodeUrl: function(url) {
      return decodeURIComponent(url)
    },
    ie: function() {
      var agent = navigator.userAgent.toLowerCase();
      return ( !! window.ActiveXObject || "ActiveXObject" in window) ? ((agent.match(/msie\s(\d+)/) || [])[1] || (agent.match(/Trident/i) && agent.match(/rv:(\d+)/) || [])[1] || false) : false
    } (),
    val: function(jsonObj, attrName) {
      if (jsonObj === undefined) {
        return ""
      }
      if (attrName === undefined || attrName == "") {
        return typeof jsonObj === "string" ? jsonObj: ""
      }
      var ret = jsonObj[attrName],
      prm = [],
      p,
      i;
      if (ret === undefined) {
        try {
          if (typeof attrName === "string") {
            prm = attrName.split(".")
          }
          i = prm.length;
          if (i) {
            ret = jsonObj;
            while (ret && i--) {
              p = prm.shift();
              ret = ret[p]
            }
          }
        } catch(e) {}
      }
      if (ret === undefined) {
        return ""
      }
      return ret
    },
    hashCode: function(str, caseSensitive) {
      if (caseSensitive != true) {
        str = str.toLowerCase()
      }
      var hash = 1315423911,
      i, ch;
      for (i = str.length - 1; i >= 0; i--) {
        ch = str.charCodeAt(i);
        hash ^= ((hash << 5) + ch + (hash >> 2))
      }
      return (hash & 2147483647)
    },
    loadFile: function(file, callback, error) {
      callback = callback ||
      function() {};
      error = error ||
      function(data) {
        js.showMessage(data)
      };
      var files = typeof file == "string" ? [file] : file;
      var htmlDoc = document.getElementsByTagName("head")[0],
      okCounts = 0,
      fileCounts = files.length,
      i,
      loadFilePath = null;
      for (i = 0; i < fileCounts; i++) {
        var includeFile = null,
        att = null,
        ext, hash;
        loadFilePath = files[i];
        hash = js.hashCode(loadFilePath);
        if (document.getElementById("loadHash_" + hash)) {
          okCounts += 1;
          if (okCounts == fileCounts) {
            callback();
            return true
          }
          continue
        }
        att = loadFilePath.split("?")[0].split(".");
        ext = att[att.length - 1].toLowerCase();
        switch (ext) {
        case "css":
          includeFile = document.createElement("link");
          includeFile.setAttribute("rel", "stylesheet");
          includeFile.setAttribute("type", "text/css");
          includeFile.setAttribute("href", loadFilePath);
          break;
        case "js":
          includeFile = document.createElement("script");
          includeFile.setAttribute("type", "text/javascript");
          includeFile.setAttribute("src", loadFilePath);
          break;
        case "jpg":
        case "jpeg":
        case "png":
        case "gif":
          includeFile = document.createElement("img");
          includeFile.setAttribute("src", loadFilePath);
          break;
        default:
          error("载入的格式不支持:" + loadFilePath);
          return false
        }
        if (typeof includeFile != "undefined") {
          includeFile.setAttribute("id", "loadHash_" + hash);
          htmlDoc.appendChild(includeFile);
          includeFile.onreadystatechange = function() {
            if (includeFile.readyState == "loaded" || includeFile.readyState == "complete") {
              okCounts += 1;
              if (okCounts == fileCounts) {
                callback();
                return true
              }
            }
          };
          includeFile.onload = function() {
            okCounts += 1;
            if (okCounts == fileCounts) {
              callback();
              return true
            }
          };
          includeFile.onerror = function() {
            $("#loadhash_" + hash).remove();
            error(loadFilePath + " load error");
            return false
          }
        } else {
          error("文件创建失败");
          return false
        }
      }
    },
    windowOpen: function(url, name, width, height) {
      var top = parseInt((window.screen.height - height) / 2, 10),
      left = parseInt((window.screen.width - width) / 2, 10),
      options = "location=no,menubar=no,toolbar=no,dependent=yes,minimizable=no,modal=yes,alwaysRaised=yes,resizable=yes,scrollbars=yes,width=" + width + ",height=" + height + ",top=" + top + ",left=" + left;
      window.open(url, name, options)
    },
    windowClose: function() {
      setTimeout(function() {
        window.opener = null;
        window.open("", "_self");
        window.close()
      },
      100)
    },
    addParam: function(url, params) {
      if (params != "") {
        url += (url.indexOf("?") == -1 ? "?": "&");
        url += params
      }
      return url
    },
    getParam: function(paramName, url) {
      var reg = new RegExp("(^|&)" + paramName + "=([^&]*)(&|$)", "i");
      if (!url || url == "") {
        url = window.location.search
      } else {
        url = url.substring(url.indexOf("?"))
      }
      r = url.substr(1).match(reg);
      if (r != null) {
        return unescape(r[2])
      }
      return null
    },
    alertObj: function(obj) {
      var ob = eval(obj);
      var index = 1,
      property = "";
      for (var p in ob) {
        property += (index++) + "、" + p + " = " + ob[p] + "\n"
      }
      alert(property)
    },
    text: function(code, params) {
      if (code) {
        js.i18n = js.i18n || {};
        var text = js.i18n[code];
        if (! (text && text != "")) {
          text = code
        }
        if (params) {
          for (var i = 1; i < arguments.length; i++) {
            var re = new RegExp("\\{" + (i - 1) + "\\}", "gm");
            text = text.replace(re, arguments[i])
          }
        }
        return text
      }
      return code
    },
    getDictLabel: function(dictListJson, value, defaultValue, inCss) {
      var result = [];
      for (var i = 0; i < dictListJson.length; i++) {
        var row = dictListJson[i];
        if (("," + value + ",").indexOf("," + row.dictValue + ",") != -1) {
          var str = "";
          if (inCss && (row.cssClass || row.cssStyle)) {
            str += "<span";
            if (row.cssClass) {
              str += ' class="' + row.cssClass + '"'
            }
            if (row.cssStyle) {
              str += ' style="' + row.cssStyle + '"'
            }
            result.push(str + ">" + row.dictLabel + "</span>")
          } else {
            result.push(row.dictLabel)
          }
        }
      }
      return result.length > 0 ? result.join(",") : defaultValue
    },
    loading: function(message, ignoreMessageIfExists) {
      var topJs;
      try {
        top.loadingFlag = true;
        topJs = top.js || parent.parent.js || parent.js
      } catch(e) {}
      if (typeof loadingFlag == "undefined" && topJs) {
        if (typeof topJs.loading == "function") {
          topJs.loading(message);
          return
        }
      }
      if (message == undefined || message == "") {
        message = js.text("loading.message")
      }
      if (message == "none") {
        return
      }
      setTimeout(function() {
        if (!js.pageLoadingNum) {
          js.pageLoadingNum = 0
        }
        if (!js.pageLoadingStyle) {
          if ($("body").hasClass("loading-topline")) {
            js.pageLoadingStyle = 2
          } else {
            js.pageLoadingStyle = 1
          }
        }
        if (js.pageLoadingStyle == 1) {
          message += '<em onclick="js.closeLoading(0, true)">×</em>';
          if ($("#page-loading").length == 0) {
            $("body").append('<div id="page-loading" onmouseover="$(this).find(\'em\').show()" onmouseout="$(this).find(\'em\').hide()">' + message + "</div>")
          } else {
            if (! (ignoreMessageIfExists == true)) {
              $("#page-loading").html(message)
            }
          }
        } else {
          if (js.pageLoadingStyle == 2) {
            if ($("#page-loading-top").length == 0) {
              $("body").append('<div id="page-loading-top" class="page-loading-top"></div>');
              $("#page-loading-top").animate({
                width: "65%"
              },
              2000,
              function() {
                $(this).animate({
                  width: "85%"
                },
                8000)
              })
            }
          }
        }
        js.pageLoadingNum++
      },
      0)
    },
    closeLoading: function(timeout, forceClose) {
      var topJs;
      try {
        top.loadingFlag = true;
        topJs = top.js || parent.parent.js || parent.js
      } catch(e) {}
      if (typeof loadingFlag == "undefined" && topJs) {
        if (typeof topJs.closeLoading == "function") {
          topJs.closeLoading(timeout, forceClose);
          return
        }
      }
      setTimeout(function() {
        if (!js.pageLoadingNum) {
          js.pageLoadingNum = 0
        }
        js.pageLoadingNum--;
        if (forceClose || js.pageLoadingNum <= 0) {
          if (js.pageLoadingStyle == 1) {
            $("#page-loading").remove()
          } else {
            if (js.pageLoadingStyle == 2) {
              $("#page-loading-top").stop().animate({
                width: "100%"
              },
              200,
              function() {
                $(this).fadeOut(300,
                function() {
                  $(this).remove()
                })
              })
            }
          }
          js.pageLoadingNum = 0
        }
      },
      timeout == undefined ? 0 : timeout)
    },
    layer: function() {
      try {
        if (top.layer) {
          return top.layer
        }
        if (parent.parent.layer) {
          return parent.parent.layer
        }
        if (parent.layer) {
          return parent.layer
        }
      } catch(e) {}
      if (window.layer) {
        return layer
      }
      return null
    } (),
    showMessage: function(message, title, type, timeout) {
      var msgType, layerIcon, msg = String(message),
      msgTimeout = timeout == undefined ? 4000 : timeout;
      var contains = function(str, searchs) {
        if (searchs) {
          var ss = searchs.split(",");
          for (var i = 0; i < ss.length; i++) {
            if (msg.indexOf(ss[i]) >= 0) {
              return true
            }
          }
        }
        return false
      };
      if (type == "error" || contains(msg, js.text("showMessage.error"))) {
        msgType = "error";
        layerIcon = 2
      } else {
        if (type == "warning" || contains(msg, js.text("showMessage.warning"))) {
          msgType = "warning";
          layerIcon = 5
        } else {
          if (type == "success" || contains(msg, js.text("showMessage.success"))) {
            msgType = "success";
            layerIcon = 1
          } else {
            msgType = "info";
            layerIcon = 6
          }
        }
      }
      try {
        if (top.toastr) {
          var positionClass = "toast-bottom-right";
          if (msg && msg.length >= 8 && msg.indexOf("posfull:") >= 0) {
            if (timeout == undefined) {
              msgTimeout = 0
            }
            positionClass = "toast-top-full-width";
            msg = msg.substring(8);
            js.log(msg)
          }
          top.toastr.options = {
            closeButton: true,
            positionClass: positionClass,
            timeOut: msgTimeout
          };
          top.toastr[msgType](msg, title);
          return
        }
      } catch(e) {}
      if (!js.layer) {
        alert(msg);
        return
      }
      if (layerIcon) {
        js.layer.msg(msg, {
          icon: layerIcon,
          time: msgTimeout
        })
      } else {
        js.layer.msg(msg, {
          time: msgTimeout
        })
      }
    },
    showErrorMessage: function(responseText) {
      if (responseText && responseText != "") {
        js.error(js.abbr(responseText, 500));
        if (responseText.indexOf("<html ") != -1 || responseText.indexOf("<head ") != -1 || responseText.indexOf("<body ") != -1) {
          js.showMessage("未知错误，F12查看异常信息！", null, "error")
        } else {
          try {
            var json = JSON.parse(responseText);
            if (typeof json == "object" && typeof json.message != "undefined") {
              js.showMessage(json.message, null, "error");
              return
            }
          } catch(e) {}
          js.showMessage(responseText, null, "error")
        }
      }
    },
    closeMessage: function() {
      try {
        if (top.toastr) {
          top.toastr.clear()
        }
      } catch(e) {}
    },
    alert: function(message, options, closed) {
      if (typeof options != "object") {
        closed = options;
        options = {
          icon: 1
        }
      }
      if (!js.layer) {
        alert(message);
        if (typeof closed == "function") {
          closed()
        }
        return
      }
      js.layer.alert(message, options,
      function(index) {
        if (typeof closed == "function") {
          closed(index)
        }
        js.layer.close(index)
      })
    },
    confirm: function(message, urlOrFun, data, callback, dataType, async, loadingMessage) {
      if (typeof data == "function") {
        loadingMessage = async;
        async = dataType;
        dataType = callback;
        callback = data;
        data = undefined
      }
      var sendAjax = function() {
        js.loading(loadingMessage == undefined ? js.text("loading.submitMessage") : loadingMessage);
        $.ajax({
          type: "POST",
          url: urlOrFun,
          data: data,
          dataType: dataType == undefined ? "json": dataType,
          async: async == undefined ? true: async,
          error: function(data) {
            js.showErrorMessage(data.responseText);
            js.closeLoading(0, true)
          },
          success: function(data) {
            if (typeof callback == "function") {
              callback(data)
            }
            js.closeLoading()
          }
        })
      };
      if (!js.layer) {
        if (confirm(message)) {
          if (typeof urlOrFun == "function") {
            urlOrFun()
          } else {
            sendAjax()
          }
        }
        return
      }
      var options = {
        icon: 3
      };
      js.layer.confirm(message, options,
      function(index) {
        if (typeof urlOrFun == "function") {
          urlOrFun()
        } else {
          sendAjax()
        }
        layer.close(index)
      });
      return false
    },
    template: function(id, data, callback) {
      var tpl = String($("#" + id).html()).replace(/(\/\/\<!\-\-)|(\/\/\-\->)/g, ""),
      data = data || [];
      if (typeof callback == "function") {
        laytpl(tpl).render(data || [],
        function(render) {
          callback(render)
        });
        return null
      }
      return laytpl(tpl).render(data || [])
    },
    ajaxSubmit: function(url, data, callback, dataType, async, message) {
      js.loading(message == undefined ? js.text("loading.submitMessage") : message);
      $(".btn").attr("disabled", true);
      if (typeof data == "function") {
        message = async;
        async = dataType;
        dataType = callback;
        callback = data;
        data = undefined
      }
      var options = {};
      if (typeof callback == "object") {
        options = callback;
        callback = options.callback;
        dataType = options.dataType;
        async = options.async;
        message = options.message
      }
      $.ajax($.extend(true, {
        type: "POST",
        url: url,
        data: data,
        dataType: dataType == undefined ? "json": dataType,
        async: async == undefined ? true: async,
        error: function(data) {
          $(".btn").attr("disabled", false);
          js.showErrorMessage(data.responseText);
          js.closeLoading(0, true)
        },
        success: function(data, status, xhr) {
          $(".btn").attr("disabled", false);
          js.closeLoading();
          if (typeof callback == "function") {
            callback(data, status, xhr)
          } else {
            js.log(data)
          }
        }
      },
      options))
    },
    ajaxSubmitForm: function(formJqueryObj, callback, dataType, async, message) {
      js.loading(message == undefined ? js.text("loading.submitMessage") : message);
      $(".btn").attr("disabled", true);
      var options = {};
      if (typeof callback == "object") {
        options = callback;
        callback = options.callback;
        dataType = options.dataType;
        async = options.async;
        message = options.message
      }
      if (options.downloadFile === true) {
        options.iframe = true
      }
      formJqueryObj.ajaxSubmit($.extend(true, {
        type: "POST",
        xhrFields: {
          withCredentials: true
        },
        url: formJqueryObj.attr("action"),
        dataType: dataType == undefined ? "json": dataType,
        async: async == undefined ? true: async,
        error: function(data) {
          $(".btn").attr("disabled", false);
          js.showErrorMessage(data.responseText);
          js.closeLoading(0, true)
        },
        success: function(data, status, xhr) {
          $(".btn").attr("disabled", false);
          js.closeLoading();
          if (typeof callback == "function") {
            callback(data, status, xhr)
          } else {
            js.log(data)
          }
        }
      },
      options));
      if (options.downloadFile === true) {
        $(".btn").attr("disabled", false);
        js.closeLoading()
      }
    },
    trim: function(str) {
      return jQuery.trim(str)
    },
    startWith: function(str, start) {
      var reg = new RegExp("^" + start);
      return reg.test(str)
    },
    endWith: function(str, end) {
      var reg = new RegExp(end + "$");
      return reg.test(str)
    },
    abbr: function(name, maxLength) {
      if (!maxLength) {
        maxLength = 20
      }
      if (name == null || name.length < 1) {
        return ""
      }
      var w = 0;
      var s = 0;
      var p = false;
      var b = false;
      var nameSub;
      for (var i = 0; i < name.length; i++) {
        if (i > 1 && b == false) {
          p = false
        }
        if (i > 1 && b == true) {
          p = true
        }
        var c = name.charCodeAt(i);
        if ((c >= 1 && c <= 126) || (65376 <= c && c <= 65439)) {
          w++;
          b = false
        } else {
          w += 2;
          s++;
          b = true
        }
        if (w > maxLength && i <= name.length - 1) {
          if (b == true && p == true) {
            nameSub = name.substring(0, i - 2) + "..."
          }
          if (b == false && p == false) {
            nameSub = name.substring(0, i - 3) + "..."
          }
          if (b == true && p == false) {
            nameSub = name.substring(0, i - 2) + "..."
          }
          if (p == true) {
            nameSub = name.substring(0, i - 2) + "..."
          }
          break
        }
      }
      if (w <= maxLength) {
        return name
      }
      return nameSub
    },
    formatNumber: function(num, cent, isThousand, defaultValue) {
      if (num == undefined || num == "") {
        return defaultValue || ""
      }
      num = num.toString().replace(/\$|\,/g, "");
      if (isNaN(num)) {
        num = "0"
      }
      var sign = (num == (num = Math.abs(num)));
      num = Math.floor(num * Math.pow(10, cent) + 0.50000000001);
      var cents = num % Math.pow(10, cent);
      num = Math.floor(num / Math.pow(10, cent)).toString();
      cents = cents.toString();
      while (cents.length < cent) {
        cents = "0" + cents
      }
      if (isThousand) {
        for (var i = 0; i < Math.floor((num.length - (1 + i)) / 3); i++) {
          num = num.substring(0, num.length - (4 * i + 3)) + "," + num.substring(num.length - (4 * i + 3))
        }
      }
      if (cent > 0) {
        return (((sign) ? "": "-") + num + "." + cents)
      } else {
        return (((sign) ? "": "-") + num)
      }
    },
    formatMoney: function(s, n) {
      if (s == undefined || s == "") {
        return "0.00"
      }
      n = n >= 0 && n <= 20 ? n: 2;
      s = parseFloat((s + "").replace(/[^\d\.-]/g, "")).toFixed(n) + "";
      var l = s.split(".")[0].split("").reverse(),
      r = s.split(".")[1],
      i,
      t = "";
      for (i = 0; i < l.length; i++) {
        t += l[i] + ((i + 1) % 3 == 0 && (i + 1) != l.length ? ",": "")
      }
      return t.split("").reverse().join("") + (r ? "." + r: "")
    },
    numberPad: function(num, n) {
      var len = num.toString().length;
      while (len < n) {
        num = "0" + num;
        len++
      }
      return num
    },
    formatDate: function(date, f) {
      if (date == undefined) {
        return ""
      }
      if (f == undefined) {
        f = "yyyy-MM-dd HH:mm"
      }
      var o = {
        "M+": date.getMonth() + 1,
        "d+": date.getDate(),
        "H+": date.getHours(),
        "m+": date.getMinutes(),
        "s+": date.getSeconds(),
        "q+": Math.floor((date.getMonth() + 3) / 3),
        S: date.getMilliseconds()
      };
      if (/(y+)/.test(f)) {
        f = f.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length))
      }
      for (var k in o) {
        if (new RegExp("(" + k + ")").test(f)) {
          f = f.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length))
        }
      }
      return f
    },
    parseDate: function(date) {
      if (date == undefined) {
        return null
      }
      return new Date(date.replace(/-/g, "/"))
    },
    addDate: function(date, dadd) {
      date = date.valueOf();
      date = date + dadd * 24 * 60 * 60 * 1000;
      return new Date(date)
    },
    quickSelectDate: function(type, beginDateId, endDateId) {
      var now = new Date(),
      nowYear = now.getFullYear(),
      nowMonth = now.getMonth(),
      nowDay = now.getDate(),
      nowDayOfWeek = now.getDay(),
      beginDate = $("#" + beginDateId),
      endDate = $("#" + endDateId),
      formatDate = function(date) {
        return date.format("yyyy-MM-dd")
      },
      getMonthDays = function(myMonth) {
        var monthStartDate = new Date(nowYear, myMonth, 1);
        var monthEndDate = new Date(nowYear, myMonth + 1, 1);
        var days = (monthEndDate - monthStartDate) / (1000 * 60 * 60 * 24);
        return days
      };
      if (type == "1") {
        beginDate.val(formatDate(now));
        endDate.val(beginDate.val())
      } else {
        if (type == "2") {
          nowDayOfWeek = nowDayOfWeek == 0 ? 6 : nowDayOfWeek - 1;
          var weekStartDate = new Date(nowYear, nowMonth, nowDay - nowDayOfWeek);
          var weekEndDate = new Date(nowYear, nowMonth, nowDay + (6 - nowDayOfWeek));
          beginDate.val(formatDate(weekStartDate));
          endDate.val(formatDate(weekEndDate))
        } else {
          if (type == "3") {
            var monthStartDate = new Date(nowYear, nowMonth, 1);
            var monthEndDate = new Date(nowYear, nowMonth, getMonthDays(nowMonth));
            beginDate.val(formatDate(monthStartDate));
            endDate.val(formatDate(monthEndDate))
          } else {
            if (type == "4") {
              var quarterStartMonth = 0;
              if (nowMonth < 3) {
                quarterStartMonth = 0
              }
              if (2 < nowMonth && nowMonth < 6) {
                quarterStartMonth = 3
              }
              if (5 < nowMonth && nowMonth < 9) {
                quarterStartMonth = 6
              }
              if (nowMonth > 8) {
                quarterStartMonth = 9
              }
              var quarterEndMonth = quarterStartMonth + 2;
              var quarterStartDate = new Date(nowYear, quarterStartMonth, 1);
              var quarterEndDate = new Date(nowYear, quarterEndMonth, getMonthDays(quarterEndMonth));
              beginDate.val(formatDate(quarterStartDate));
              endDate.val(formatDate(quarterEndDate))
            } else {
              if (type == "5") {
                var lastMonthDate = new Date();
                lastMonthDate.setDate(1);
                lastMonthDate.setMonth(lastMonthDate.getMonth() - 1);
                var lastYear = lastMonthDate.getYear();
                var lastMonth = lastMonthDate.getMonth();
                var lastMonthStartDate = new Date(nowYear, lastMonth, 1);
                var lastMonthEndDate = new Date(nowYear, lastMonth, getMonthDays(lastMonth));
                beginDate.val(formatDate(lastMonthStartDate));
                endDate.val(formatDate(lastMonthEndDate))
              }
            }
          }
        }
      }
      beginDate.change();
      endDate.change()
    },
    cookie: function(name, value, options) {
      if (typeof value != "undefined") {
        options = options || {};
        if (value === null) {
          value = "";
          options.expires = -1
        }
        var expires = "";
        if (options.expires && (typeof options.expires == "number" || options.expires.toUTCString)) {
          var date;
          if (typeof options.expires == "number") {
            date = new Date();
            date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000))
          } else {
            date = options.expires
          }
          expires = "; expires=" + date.toUTCString()
        }
        var path = options.path ? "; path=" + options.path: "";
        var domain = options.domain ? "; domain=" + options.domain: "";
        var secure = options.secure ? "; secure": "";
        document.cookie = [name, "=", encodeURIComponent(value), expires, path, domain, secure].join("")
      } else {
        var cookieValue = null;
        if (document.cookie && document.cookie != "") {
          var cookies = document.cookie.split(";");
          for (var i = 0; i < cookies.length; i++) {
            var cookie = jQuery.trim(cookies[i]);
            if (cookie.substring(0, name.length + 1) == (name + "=")) {
              cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
              break
            }
          }
        }
        return cookieValue
      }
    },
    tabPage: function() {
      if (window.tabPage) {
        return tabPage
      }
      try {
        if (parent.tabPage) {
          return parent.tabPage
        }
        if (parent.parent.tabPage) {
          return parent.parent.tabPage
        }
        if (top.tabPage) {
          return top.tabPage
        }
      } catch(e) {}
      return null
    } (),
    initTabPage: function(id, options) {
      var tabPage = window.tabPage;
      return tabPage.initTabPage(id, options)
    },
    addTabPage: function($this, title, url, closeable, refresh) {
      top.prevWindow = window;
      var tabPage = js.tabPage;
      if (!tabPage || typeof tabPage.addTabPage != "function") {
        if (js.layer) {
          js.layer.open({
            type: 2,
            maxmin: true,
            title: title,
            area: [($(top.window).width() - 10) + "px", ($(top.window).height() - 10) + "px"],
            content: url,
            success: function(layero, index) {
              var win = js.layer.iframeWindow(index);
              win.$(".main-content>.box-main>.box-header").hide()
            }
          })
        } else {
          js.windowOpen(url, title, "auto", "auto")
        }
        return
      }
      return tabPage.addTabPage($this, title, url, closeable, refresh)
    },
    getCurrentTabPage: function(currentTabCallback) {
      var tabPage = js.tabPage;
      if (!tabPage || typeof tabPage.getCurrentTabPage != "function") {
        return
      }
      tabPage.getCurrentTabPage(currentTabCallback)
    },
    getPrevTabPage: function(preTabCallback, isCloseCurrentTab) {
      var tabPage = js.tabPage;
      if (!tabPage || typeof tabPage.getPrevTabPage != "function") {
        return
      }
      tabPage.getPrevTabPage(preTabCallback, isCloseCurrentTab)
    },
    closeCurrentTabPage: function(preTabCallback) {
      var tabPage = js.tabPage;
      if (!tabPage || typeof tabPage.closeCurrentTabPage != "function" || window.name.indexOf("layui-layer") != -1) {
        var layerIndex;
        if (js.layer) {
          layerIndex = js.layer.getFrameIndex(window.name)
        }
        if (layerIndex) {
          js.layer.close(layerIndex)
        } else {
          js.windowClose()
        }
        if (typeof preTabCallback == "function") {
          try {
            preTabCallback(top.prevWindow)
          } catch(e) {
            js.error(e)
          }
        }
        return
      }
      tabPage.closeCurrentTabPage(preTabCallback)
    }
  };
  window.js = js;
  window.log = js.log;
  window.error = js.error;
  window.lang = window.lang || "zh_CN";
  window.text = js.text
})(window.jQuery, window); +
function(d) {
  var b = "lte.boxwidget";
  var g = {
    animationSpeed: 500,
    collapseTrigger: '[data-widget="collapse"]',
    removeTrigger: '[data-widget="remove"]',
    collapseIcon: "fa-minus",
    expandIcon: "fa-plus",
    removeIcon: "fa-times"
  };
  var a = {
    data: ".box",
    collapsed: ".collapsed-box",
    body: ".box-body",
    footer: ".box-footer",
    tools: ".box-tools"
  };
  var i = {
    collapsed: "collapsed-box"
  };
  var j = {
    collapsed: "collapsed.boxwidget",
    expanded: "expanded.boxwidget",
    removed: "removed.boxwidget"
  };
  var f = function(l, k) {
    this.element = l;
    this.options = k;
    this._setUpListeners()
  };
  f.prototype.toggle = function() {
    var k = !d(this.element).is(a.collapsed);
    if (k) {
      this.collapse()
    } else {
      this.expand()
    }
  };
  f.prototype.expand = function() {
    var m = d.Event(j.expanded);
    var l = this.options.collapseIcon;
    var k = this.options.expandIcon;
    d(this.element).removeClass(i.collapsed);
    d(this.element).find(a.tools).find("." + k).removeClass(k).addClass(l);
    d(this.element).find(a.body + ", " + a.footer).slideDown(this.options.animationSpeed,
    function() {
      d(this.element).trigger(m)
    }.bind(this))
  };
  f.prototype.collapse = function() {
    var l = d.Event(j.collapsed);
    var m = this.options.collapseIcon;
    var k = this.options.expandIcon;
    d(this.element).find(a.tools).find("." + m).removeClass(m).addClass(k);
    d(this.element).find(a.body + ", " + a.footer).slideUp(this.options.animationSpeed,
    function() {
      d(this.element).addClass(i.collapsed);
      d(this.element).trigger(l)
    }.bind(this))
  };
  f.prototype.remove = function() {
    var k = d.Event(j.removed);
    d(this.element).slideUp(this.options.animationSpeed,
    function() {
      d(this.element).trigger(k);
      d(this.element).remove()
    }.bind(this))
  };
  f.prototype._setUpListeners = function() {
    var k = this;
    d(this.element).on("click", this.options.collapseTrigger,
    function(l) {
      if (l) {
        l.preventDefault()
      }
      k.toggle()
    });
    d(this.element).on("click", this.options.removeTrigger,
    function(l) {
      if (l) {
        l.preventDefault()
      }
      k.remove()
    });
    d(this.options.collapseTrigger).css({
      cursor: "pointer"
    });
    d(this.options.removeTrigger).css({
      cursor: "pointer"
    })
  };
  function h(k) {
    return this.each(function() {
      var n = d(this);
      var m = n.data(b);
      if (!m) {
        var l = d.extend({},
        g, n.data(), typeof k == "object" && k);
        n.data(b, (m = new f(n, l)))
      }
      if (typeof k == "string") {
        if (typeof m[k] == "undefined") {
          throw new Error("No method named " + k)
        }
        m[k]()
      }
    })
  }
  var c = d.fn.boxWidget;
  d.fn.boxWidget = h;
  d.fn.boxWidget.Constructor = f;
  d.fn.boxWidget.noConflict = function() {
    d.fn.boxWidget = c;
    return this
  };
  d(function() {
    d(a.data).each(function() {
      h.call(d(this))
    });
    d(".box-child").boxWidget({
      collapseTrigger: '[data-widget="collapse-child"]',
      removeTrigger: '[data-widget="remove-child"]'
    })
  })
} (jQuery); ! (function(a) {
  a.fn.extend({
    placeholder: function(b) {
      b = a.extend({
        placeholderColor: "#ACA899",
        isUseSpan: true,
        onInput: true,
        noFixClass: "placeholder-no-fix"
      },
      b);
      a(this).each(function() {
        var h = this;
        var c = "placeholder" in document.createElement("input");
        if (!c) {
          if (a(h).hasClass(b.noFixClass)) {
            return
          }
          var i = a(h).attr("placeholder");
          var d = a(h).css("color");
          if (b.isUseSpan == false) {
            a(h).focus(function() {
              var n = new RegExp("^" + i + "$|^$");
              n.test(a(h).val()) && a(h).val("").css("color", d)
            }).blur(function() {
              if (a(h).val() == i) {
                a(h).css("color", d)
              } else {
                if (a(h).val().length == 0) {
                  a(h).val(i).css("color", b.placeholderColor)
                }
              }
            }).trigger("blur")
          } else {
            var f = "";
            if (a(h).parent().hasClass("input-group")) {
              f = "left:" + a(h).position().left + "px;"
            }
            var k = a(h).width() == 0 ? 150 : a(h).width();
            var l = a(h).hasClass("input-sm") ? a(h).height() : a(h).outerHeight();
            var m = a('<span class="wrap-placeholder" style="position:absolute;display:inline-block;overflow:hidden;z-index:1000;color:' + b.placeholderColor + "; width:" + k + "px; height:" + l + "px;" + f + '">' + i + "</span>");
            m.css({
              "margin-left": a(h).css("margin-left"),
              "margin-top": a(h).css("margin-top"),
              "font-size": a(h).css("font-size"),
              "font-family": a(h).css("font-family"),
              "font-weight": a(h).css("font-weight"),
              "line-height": h.nodeName.toLowerCase() == "textarea" ? a(h).css("line-weight") : l + "px",
              "padding-left": parseInt(a(h).css("padding-left")) + 2 + "px",
              "padding-top": h.nodeName.toLowerCase() == "textarea" ? parseInt(a(h).css("padding-top")) + 2 : 0
            });
            var g = a(h).prev();
            if (g.hasClass("wrap-placeholder")) {
              g.remove()
            }
            a(h).before(m.click(function() {
              a(h).trigger("focus")
            }));
            a(h).val().length != 0 && m.hide();
            if (b.onInput) {
              var j = typeof(h.oninput) == "object" ? "input": "propertychange";
              a(h).bind(j,
              function() {
                m[0].style.display = a(h).val().length != 0 ? "none": "inline-block"
              })
            } else {
              a(h).focus(function() {
                m.hide()
              }).blur(function() { / ^$ / .test(a(h).val()) && m.show()
              })
            }
          }
        }
      });
      return this
    }
  })
})(jQuery); (function(a) {
  a.fn.textareaAutoHieght = function(b) {
    var d = {
      maxHeight: null,
      minHeight: a(this).attr("rows") * 18
    };
    var c = a.extend({},
    d, b);
    return a(this).each(function() {
      a(this).bind("paste cut keydown keyup focus blur",
      function() {
        var f, g = this.style;
        this.style.height = c.minHeight + "px";
        if (this.scrollHeight > c.minHeight) {
          if (c.maxHeight && this.scrollHeight > c.maxHeight) {
            f = c.maxHeight;
            g.overflowY = "scroll"
          } else {
            f = this.scrollHeight;
            g.overflowY = "hidden"
          }
          g.height = f + "px"
        }
      }).trigger("blur")
    })
  }
})(jQuery); (function(X) {
  function C(k, h, n) {
    var p = k[0],
    m = /er/.test(n) ? U: /bl/.test(n) ? P: V,
    l = n == j ? {
      checked: p[V],
      disabled: p[P],
      indeterminate: "true" == k.attr(U) || "false" == k.attr(o)
    }: p[m];
    if (/^(ch|di|in)/.test(n) && !l) {
      Q(k, m)
    } else {
      if (/^(un|en|de)/.test(n) && l) {
        O(k, m)
      } else {
        if (n == j) {
          for (m in l) {
            l[m] ? Q(k, m, !0) : O(k, m, !0)
          }
        } else {
          if (!h || "toggle" == n) {
            if (!h) {
              k[S]("ifClicked")
            }
            l ? p[T] !== K && O(k, m) : Q(k, m)
          }
        }
      }
    }
  }
  function Q(y, x, u) {
    var v = y[0],
    t = y.parent(),
    q = x == V,
    n = x == U,
    m = x == P,
    w = n ? o: q ? N: "enabled",
    l = W(y, w + i(v[T])),
    s = W(y, x + i(v[T]));
    if (!0 !== v[x]) {
      if (!u && x == V && v[T] == K && v.name) {
        var k = y.closest("form"),
        h = 'input[name="' + v.name + '"]',
        h = k.length ? k.find(h) : X(h);
        h.each(function() {
          this !== v && X(this).data(R) && O(X(this), x)
        })
      }
      n ? (v[x] = !0, v[V] && O(y, V, "force")) : (u || (v[x] = !0), q && v[U] && O(y, U, !1));
      b(y, q, x, u)
    }
    v[P] && W(y, f, !0) && t.find("." + g).css(f, "default");
    t[B](s || W(y, x) || "");
    m ? t.attr("aria-disabled", "true") : t.attr("aria-checked", n ? "mixed": "true");
    t[c](l || W(y, w) || "")
  }
  function O(y, x, v) {
    var w = y[0],
    s = y.parent(),
    n = x == V,
    m = x == U,
    k = x == P,
    l = m ? o: n ? N: "enabled",
    D = W(y, l + i(w[T])),
    z = W(y, x + i(w[T]));
    if (!1 !== w[x]) {
      if (m || !v || "force" == v) {
        w[x] = !1
      }
      b(y, n, l, v)
    } ! w[P] && W(y, f, !0) && s.find("." + g).css(f, "pointer");
    s[c](z || W(y, x) || "");
    k ? s.attr("aria-disabled", "false") : s.attr("aria-checked", "false");
    s[B](D || W(y, l) || "")
  }
  function a(k, h) {
    if (k.data(R)) {
      k.parent().html(k.attr("style", k.data(R).s || ""));
      if (h) {
        k[S](h)
      }
      k.off(".i").unwrap();
      X(A + '[for="' + k[0].id + '"]').add(k.closest(A)).off(".i")
    }
  }
  function W(k, h, l) {
    if (k.data(R)) {
      return k.data(R).o[h + (l ? "": "Class")]
    }
  }
  function i(h) {
    return h.charAt(0).toUpperCase() + h.slice(1)
  }
  function b(k, h, l, m) {
    if (!m) {
      if (h) {
        k[S]("ifToggled")
      }
      k[S]("ifChanged")[S]("if" + i(l))
    }
  }
  var R = "iCheck",
  g = R + "-helper",
  K = "radio",
  V = "checked",
  N = "un" + V,
  P = "disabled",
  o = "determinate",
  U = "in" + o,
  j = "update",
  T = "type",
  B = "addClass",
  c = "removeClass",
  S = "trigger",
  A = "label",
  f = "cursor",
  d = /ipad|iphone|ipod|android|blackberry|windows phone|opera mini|silk/i.test(navigator.userAgent);
  X.fn[R] = function(D, v) {
    var s = 'input[type="checkbox"], input[type="' + K + '"]',
    t = X(),
    q = function(k) {
      k.each(function() {
        var w = X(this);
        t = w.is(s) ? t.add(w) : t.add(w.find(s))
      })
    };
    if (/^(check|uncheck|toggle|indeterminate|determinate|disable|enable|update|destroy)$/i.test(D)) {
      return D = D.toLowerCase(),
      q(this),
      t.each(function() {
        var k = X(this);
        "destroy" == D ? a(k, "ifDestroyed") : C(k, !0, D);
        X.isFunction(v) && v()
      })
    }
    if ("object" != typeof D && D) {
      return this
    }
    var p = X.extend({
      checkedClass: V,
      disabledClass: P,
      indeterminateClass: U,
      checkboxClass: "icheckbox_minimal-grey",
      radioClass: "iradio_minimal-grey",
      labelHover: !0,
      aria: !1
    },
    D),
    n = p.handle,
    m = p.hoverClass || "hover",
    z = p.focusClass || "focus",
    E = p.activeClass || "active",
    u = !!p.labelHover,
    l = p.labelHoverClass || "hover",
    h = ("" + p.increaseArea).replace("%", "") | 0;
    if ("checkbox" == n || n == K) {
      s = 'input[type="' + n + '"]'
    } - 50 > h && (h = -50);
    q(this);
    return t.each(function() {
      var L = X(this);
      a(L);
      var I = this,
      J = I.id,
      G = -h + "%",
      H = 100 + 2 * h + "%",
      H = {
        position: "absolute",
        top: G,
        left: G,
        display: "block",
        width: H,
        height: H,
        margin: 0,
        padding: 0,
        background: "#fff",
        border: 0,
        opacity: 0
      },
      G = d ? {
        position: "absolute",
        visibility: "hidden"
      }: h ? H: {
        position: "absolute",
        opacity: 0
      },
      y = "checkbox" == I[T] ? p.checkboxClass || "icheckbox": p.radioClass || "i" + K,
      x = X(A + '[for="' + J + '"]').add(L.closest(A)),
      w = !!p.aria,
      M = R + "-" + Math.random().toString(36).replace("0.", ""),
      F = '<div class="' + y + '" ' + (w ? 'role="' + I[T] + '" ': "");
      x.length && w && x.each(function() {
        F += 'aria-labelledby="';
        this.id ? F += this.id: (this.id = M, F += M);
        F += '"'
      });
      F = L.wrap(F + "/>")[S]("ifCreated").parent().append(p.insert);
      H = X('<ins class="' + g + '"/>').css(H).appendTo(F);
      L.data(R, {
        o: p,
        s: L.attr("style")
      }).css(G);
      p.inheritClass && F[B](I.className || "");
      p.inheritID && J && F.attr("id", R + "-" + J);
      "static" == F.css("position") && F.css("position", "relative");
      C(L, !0, j);
      if (x.length) {
        x.on("click.i mouseover.i mouseout.i touchbegin.i touchend.i",
        function(k) {
          var Z = k[T],
          Y = X(this);
          if (!I[P]) {
            if ("click" == Z) {
              if (X(k.target).is("a")) {
                return
              }
              C(L, !1, !0)
            } else {
              u && (/ut|nd/.test(Z) ? (F[c](m), Y[c](l)) : (F[B](m), Y[B](l)))
            }
            if (d) {
              k.stopPropagation()
            } else {
              return ! 1
            }
          }
        })
      }
      L.on("click.i focus.i blur.i keyup.i keydown.i keypress.i",
      function(k) {
        var Y = k[T];
        k = k.keyCode;
        if ("click" == Y) {
          return ! 1
        }
        if ("keydown" == Y && 32 == k) {
          return I[T] == K && I[V] || (I[V] ? O(L, V) : Q(L, V)),
          !1
        }
        if ("keyup" == Y && I[T] == K) { ! I[V] && Q(L, V)
        } else {
          if (/us|ur/.test(Y)) {
            F["blur" == Y ? c: B](z)
          }
        }
      });
      H.on("click mousedown mouseup mouseover mouseout touchbegin.i touchend.i",
      function(k) {
        var Z = k[T],
        Y = /wn|up/.test(Z) ? E: m;
        if (!I[P]) {
          if ("click" == Z) {
            C(L, !1, !0)
          } else {
            if (/wn|er|in/.test(Z)) {
              F[B](Y)
            } else {
              F[c](Y + " " + E)
            }
            if (x.length && u && Y == m) {
              x[/ut|nd/.test(Z) ? c: B](l)
            }
          }
          if (d) {
            k.stopPropagation()
          } else {
            return ! 1
          }
        }
      })
    })
  }
})(window.jQuery || window.Zepto); (function(f, d, a) {
  var b, g, c;
  c = "resizeEnd";
  g = {
    delay: 150
  };
  b = function(i, h, j) {
    if (typeof h === "function") {
      j = h;
      h = {}
    }
    j = j || null;
    this.element = i;
    this.settings = f.extend({},
    g, h);
    this._defaults = g;
    this._name = c;
    this._timeout = false;
    this._callback = j;
    return this.init()
  };
  b.prototype = {
    init: function() {
      var h, i;
      i = this;
      h = f(this.element);
      return h.on("resize",
      function() {
        return i.initResize()
      })
    },
    getUTCDate: function(i) {
      var h;
      i = i || new Date();
      h = Date.UTC(i.getUTCFullYear(), i.getUTCMonth(), i.getUTCDate(), i.getUTCHours(), i.getUTCMinutes(), i.getUTCSeconds(), i.getUTCMilliseconds());
      return h
    },
    initResize: function() {
      var h;
      h = this;
      h.controlTime = h.getUTCDate();
      if (h._timeout === false) {
        h._timeout = true;
        return setTimeout(function() {
          return h.runCallback(h)
        },
        h.settings.delay)
      }
    },
    runCallback: function(i) {
      var h;
      h = i.getUTCDate();
      if (h - i.controlTime < i.settings.delay) {
        return setTimeout(function() {
          return i.runCallback(i)
        },
        i.settings.delay)
      } else {
        i._timeout = false;
        return i._callback()
      }
    }
  };
  return f.fn[c] = function(h, i) {
    return this.each(function() {
      if (!f.data(this, "plugin_" + c)) {
        return f.data(this, "plugin_" + c, new b(this, h, i))
      }
    })
  }
})(jQuery, window, document); !
function(a) {
  "function" == typeof define && define.amd ? define(["jquery"], a) : a("undefined" != typeof jQuery ? jQuery: window.Zepto)
} (function(e) {
  function t(t) {
    var r = t.data;
    t.isDefaultPrevented() || (t.preventDefault(), e(t.target).ajaxSubmit(r))
  }
  function r(t) {
    var r = t.target,
    a = e(r);
    if (!a.is("[type=submit],[type=image]")) {
      var n = a.closest("[type=submit]");
      if (0 === n.length) {
        return
      }
      r = n[0]
    }
    var i = this;
    if (i.clk = r, "image" == r.type) {
      if (void 0 !== t.offsetX) {
        i.clk_x = t.offsetX,
        i.clk_y = t.offsetY
      } else {
        if ("function" == typeof e.fn.offset) {
          var o = a.offset();
          i.clk_x = t.pageX - o.left,
          i.clk_y = t.pageY - o.top
        } else {
          i.clk_x = t.pageX - r.offsetLeft,
          i.clk_y = t.pageY - r.offsetTop
        }
      }
    }
    setTimeout(function() {
      i.clk = i.clk_x = i.clk_y = null
    },
    100)
  }
  function a() {
    if (e.fn.ajaxSubmit.debug) {
      var t = "[jquery.form] " + Array.prototype.join.call(arguments, "");
      window.console && window.console.log ? window.console.log(t) : window.opera && window.opera.postError && window.opera.postError(t)
    }
  }
  var n = {};
  n.fileapi = void 0 !== e("<input type='file'/>").get(0).files,
  n.formdata = void 0 !== window.FormData;
  var i = !!e.fn.prop;
  e.fn.attr2 = function() {
    if (!i) {
      return this.attr.apply(this, arguments)
    }
    var e = this.prop.apply(this, arguments);
    return e && e.jquery || "string" == typeof e ? e: this.attr.apply(this, arguments)
  },
  e.fn.ajaxSubmit = function(t) {
    function r(r) {
      var a, n, i = e.param(r, t.traditional).split("&"),
      o = i.length,
      s = [];
      for (a = 0; o > a; a++) {
        i[a] = i[a].replace(/\+/g, " "),
        n = i[a].split("="),
        s.push([decodeURIComponent(n[0]), decodeURIComponent(n[1])])
      }
      return s
    }
    function o(a) {
      for (var n = new FormData,
      i = 0; i < a.length; i++) {
        n.append(a[i].name, a[i].value)
      }
      if (t.extraData) {
        var o = r(t.extraData);
        for (i = 0; i < o.length; i++) {
          o[i] && n.append(o[i][0], o[i][1])
        }
      }
      t.data = null;
      var s = e.extend(!0, {},
      e.ajaxSettings, t, {
        contentType: !1,
        processData: !1,
        cache: !1,
        type: u || "POST"
      });
      t.uploadProgress && (s.xhr = function() {
        var r = e.ajaxSettings.xhr();
        return r.upload && r.upload.addEventListener("progress",
        function(e) {
          var r = 0,
          a = e.loaded || e.position,
          n = e.total;
          e.lengthComputable && (r = Math.ceil(a / n * 100)),
          t.uploadProgress(e, a, n, r)
        },
        !1),
        r
      }),
      s.data = null;
      var c = s.beforeSend;
      return s.beforeSend = function(e, r) {
        r.data = t.formData ? t.formData: n,
        c && c.call(this, e, r)
      },
      e.ajax(s)
    }
    function s(r) {
      function n(e) {
        var t = null;
        try {
          e.contentWindow && (t = e.contentWindow.document)
        } catch(r) {
          a("cannot get iframe.contentWindow document: " + r)
        }
        if (t) {
          return t
        }
        try {
          t = e.contentDocument ? e.contentDocument: e.document
        } catch(r) {
          a("cannot get iframe.contentDocument: " + r),
          t = e.document
        }
        return t
      }
      function o() {
        function t() {
          try {
            var e = n(g).readyState;
            a("state = " + e),
            e && "uninitialized" == e.toLowerCase() && setTimeout(t, 50)
          } catch(r) {
            a("Server abort: ", r, " (", r.name, ")"),
            s(k),
            j && clearTimeout(j),
            j = void 0
          }
        }
        var r = f.attr2("target"),
        i = f.attr2("action"),
        o = "multipart/form-data",
        c = f.attr("enctype") || f.attr("encoding") || o;
        w.setAttribute("target", p),
        (!u || /post/i.test(u)) && w.setAttribute("method", "POST"),
        i != m.url && w.setAttribute("action", m.url),
        m.skipEncodingOverride || u && !/post/i.test(u) || f.attr({
          encoding: "multipart/form-data",
          enctype: "multipart/form-data"
        }),
        m.timeout && (j = setTimeout(function() {
          T = !0,
          s(D)
        },
        m.timeout));
        var l = [];
        try {
          if (m.extraData) {
            for (var d in m.extraData) {
              m.extraData.hasOwnProperty(d) && l.push(e.isPlainObject(m.extraData[d]) && m.extraData[d].hasOwnProperty("name") && m.extraData[d].hasOwnProperty("value") ? e('<input type="hidden" name="' + m.extraData[d].name + '">').val(m.extraData[d].value).appendTo(w)[0] : e('<input type="hidden" name="' + d + '">').val(m.extraData[d]).appendTo(w)[0])
            }
          }
          m.iframeTarget || v.appendTo("body"),
          g.attachEvent ? g.attachEvent("onload", s) : g.addEventListener("load", s, !1),
          setTimeout(t, 15);
          try {
            w.submit()
          } catch(h) {
            var x = document.createElement("form").submit;
            x.apply(w)
          }
        } finally {
          w.setAttribute("action", i),
          w.setAttribute("enctype", c),
          r ? w.setAttribute("target", r) : f.removeAttr("target"),
          e(l).remove()
        }
      }
      function s(t) {
        if (!x.aborted && !F) {
          if (M = n(g), M || (a("cannot access response document"), t = k), t === D && x) {
            return x.abort("timeout"),
            void S.reject(x, "timeout")
          }
          if (t == k && x) {
            return x.abort("server abort"),
            void S.reject(x, "error", "server abort")
          }
          if (M && M.location.href != m.iframeSrc || T) {
            g.detachEvent ? g.detachEvent("onload", s) : g.removeEventListener("load", s, !1);
            var r, i = "success";
            try {
              if (T) {
                throw "timeout"
              }
              var o = "xml" == m.dataType || M.XMLDocument || e.isXMLDoc(M);
              if (a("isXml=" + o), !o && window.opera && (null === M.body || !M.body.innerHTML) && --O) {
                return a("requeing onLoad callback, DOM not available"),
                void setTimeout(s, 250)
              }
              var u = M.body ? M.body: M.documentElement;
              x.responseText = u ? u.innerHTML: null,
              x.responseXML = M.XMLDocument ? M.XMLDocument: M,
              o && (m.dataType = "xml"),
              x.getResponseHeader = function(e) {
                var t = {
                  "content-type": m.dataType
                };
                return t[e.toLowerCase()]
              },
              u && (x.status = Number(u.getAttribute("status")) || x.status, x.statusText = u.getAttribute("statusText") || x.statusText);
              var c = (m.dataType || "").toLowerCase(),
              l = /(json|script|text)/.test(c);
              if (l || m.textarea) {
                var f = M.getElementsByTagName("textarea")[0];
                if (f) {
                  x.responseText = f.value,
                  x.status = Number(f.getAttribute("status")) || x.status,
                  x.statusText = f.getAttribute("statusText") || x.statusText
                } else {
                  if (l) {
                    var p = M.getElementsByTagName("pre")[0],
                    h = M.getElementsByTagName("body")[0];
                    p ? x.responseText = p.textContent ? p.textContent: p.innerText: h && (x.responseText = h.textContent ? h.textContent: h.innerText)
                  }
                }
              } else {
                "xml" == c && !x.responseXML && x.responseText && (x.responseXML = X(x.responseText))
              }
              try {
                E = _(x, c, m)
              } catch(y) {
                i = "parsererror",
                x.error = r = y || i
              }
            } catch(y) {
              a("error caught: ", y),
              i = "error",
              x.error = r = y || i
            }
            x.aborted && (a("upload aborted"), i = null),
            x.status && (i = x.status >= 200 && x.status < 300 || 304 === x.status ? "success": "error"),
            "success" === i ? (m.success && m.success.call(m.context, E, "success", x), S.resolve(x.responseText, "success", x), d && e.event.trigger("ajaxSuccess", [x, m])) : i && (void 0 === r && (r = x.statusText), m.error && m.error.call(m.context, x, i, r), S.reject(x, "error", r), d && e.event.trigger("ajaxError", [x, m, r])),
            d && e.event.trigger("ajaxComplete", [x, m]),
            d && !--e.active && e.event.trigger("ajaxStop"),
            m.complete && m.complete.call(m.context, x, i),
            F = !0,
            m.timeout && clearTimeout(j),
            setTimeout(function() {
              m.iframeTarget ? v.attr("src", m.iframeSrc) : v.remove(),
              x.responseXML = null
            },
            100)
          }
        }
      }
      var c, l, m, d, p, v, g, x, y, b, T, j, w = f[0],
      S = e.Deferred();
      if (S.abort = function(e) {
        x.abort(e)
      },
      r) {
        for (l = 0; l < h.length; l++) {
          c = e(h[l]),
          i ? c.prop("disabled", !1) : c.removeAttr("disabled")
        }
      }
      if (m = e.extend(!0, {},
      e.ajaxSettings, t), m.context = m.context || m, p = "jqFormIO" + (new Date).getTime(), m.iframeTarget ? (v = e(m.iframeTarget), b = v.attr2("name"), b ? p = b: v.attr2("name", p)) : (v = e('<iframe name="' + p + '" src="' + m.iframeSrc + '" />'), v.css({
        position: "absolute",
        top: "-1000px",
        left: "-1000px"
      })), g = v[0], x = {
        aborted: 0,
        responseText: null,
        responseXML: null,
        status: 0,
        statusText: "n/a",
        getAllResponseHeaders: function() {},
        getResponseHeader: function() {},
        setRequestHeader: function() {},
        abort: function(t) {
          var r = "timeout" === t ? "timeout": "aborted";
          a("aborting upload... " + r),
          this.aborted = 1;
          try {
            g.contentWindow.document.execCommand && g.contentWindow.document.execCommand("Stop")
          } catch(n) {}
          v.attr("src", m.iframeSrc),
          x.error = r,
          m.error && m.error.call(m.context, x, r, t),
          d && e.event.trigger("ajaxError", [x, m, r]),
          m.complete && m.complete.call(m.context, x, r)
        }
      },
      d = m.global, d && 0 === e.active++&&e.event.trigger("ajaxStart"), d && e.event.trigger("ajaxSend", [x, m]), m.beforeSend && m.beforeSend.call(m.context, x, m) === !1) {
        return m.global && e.active--,
        S.reject(),
        S
      }
      if (x.aborted) {
        return S.reject(),
        S
      }
      y = w.clk,
      y && (b = y.name, b && !y.disabled && (m.extraData = m.extraData || {},
      m.extraData[b] = y.value, "image" == y.type && (m.extraData[b + ".x"] = w.clk_x, m.extraData[b + ".y"] = w.clk_y)));
      var D = 1,
      k = 2,
      A = e("meta[name=csrf-token]").attr("content"),
      L = e("meta[name=csrf-param]").attr("content");
      L && A && (m.extraData = m.extraData || {},
      m.extraData[L] = A),
      m.forceSync ? o() : setTimeout(o, 10);
      var E, M, F, O = 50,
      X = e.parseXML ||
      function(e, t) {
        return window.ActiveXObject ? (t = new ActiveXObject("Microsoft.XMLDOM"), t.async = "false", t.loadXML(e)) : t = (new DOMParser).parseFromString(e, "text/xml"),
        t && t.documentElement && "parsererror" != t.documentElement.nodeName ? t: null
      },
      C = e.parseJSON ||
      function(e) {
        return window.eval("(" + e + ")")
      },
      _ = function(t, r, a) {
        var n = t.getResponseHeader("content-type") || "",
        i = "xml" === r || !r && n.indexOf("xml") >= 0,
        o = i ? t.responseXML: t.responseText;
        return i && "parsererror" === o.documentElement.nodeName && e.error && e.error("parsererror"),
        a && a.dataFilter && (o = a.dataFilter(o, r)),
        "string" == typeof o && ("json" === r || !r && n.indexOf("json") >= 0 ? o = C(o) : ("script" === r || !r && n.indexOf("javascript") >= 0) && e.globalEval(o)),
        o
      };
      return S
    }
    if (!this.length) {
      return a("ajaxSubmit: skipping submit process - no element selected"),
      this
    }
    var u, c, l, f = this;
    "function" == typeof t ? t = {
      success: t
    }: void 0 === t && (t = {}),
    u = t.type || this.attr2("method"),
    c = t.url || this.attr2("action"),
    l = "string" == typeof c ? e.trim(c) : "",
    l = l || window.location.href || "",
    l && (l = (l.match(/^([^#]+)/) || [])[1]),
    t = e.extend(!0, {
      url: l,
      success: e.ajaxSettings.success,
      type: u || e.ajaxSettings.type,
      iframeSrc: /^https/i.test(window.location.href || "") ? "javascript:false": "about:blank"
    },
    t);
    var m = {};
    if (this.trigger("form-pre-serialize", [this, t, m]), m.veto) {
      return a("ajaxSubmit: submit vetoed via form-pre-serialize trigger"),
      this
    }
    if (t.beforeSerialize && t.beforeSerialize(this, t) === !1) {
      return a("ajaxSubmit: submit aborted via beforeSerialize callback"),
      this
    }
    var d = t.traditional;
    void 0 === d && (d = e.ajaxSettings.traditional);
    var p, h = [],
    v = this.formToArray(t.semantic, h);
    if (t.data && (t.extraData = t.data, p = e.param(t.data, d)), t.beforeSubmit && t.beforeSubmit(v, this, t) === !1) {
      return a("ajaxSubmit: submit aborted via beforeSubmit callback"),
      this
    }
    if (this.trigger("form-submit-validate", [v, this, t, m]), m.veto) {
      return a("ajaxSubmit: submit vetoed via form-submit-validate trigger"),
      this
    }
    var g = e.param(v, d);
    p && (g = g ? g + "&" + p: p),
    "GET" == t.type.toUpperCase() ? (t.url += (t.url.indexOf("?") >= 0 ? "&": "?") + g, t.data = null) : t.data = g;
    var x = [];
    if (t.resetForm && x.push(function() {
      f.resetForm()
    }), t.clearForm && x.push(function() {
      f.clearForm(t.includeHidden)
    }), !t.dataType && t.target) {
      var y = t.success ||
      function() {};
      x.push(function(r) {
        var a = t.replaceTarget ? "replaceWith": "html";
        e(t.target)[a](r).each(y, arguments)
      })
    } else {
      t.success && x.push(t.success)
    }
    if (t.success = function(e, r, a) {
      for (var n = t.context || this,
      i = 0,
      o = x.length; o > i; i++) {
        x[i].apply(n, [e, r, a || f, f])
      }
    },
    t.error) {
      var b = t.error;
      t.error = function(e, r, a) {
        var n = t.context || this;
        b.apply(n, [e, r, a, f])
      }
    }
    if (t.complete) {
      var T = t.complete;
      t.complete = function(e, r) {
        var a = t.context || this;
        T.apply(a, [e, r, f])
      }
    }
    var j = e("input[type=file]:enabled", this).filter(function() {
      return "" !== e(this).val()
    }),
    w = j.length > 0,
    S = "multipart/form-data",
    D = f.attr("enctype") == S || f.attr("encoding") == S,
    k = n.fileapi && n.formdata;
    a("fileAPI :" + k);
    var A, L = (w || D) && !k;
    t.iframe !== !1 && (t.iframe || L) ? t.closeKeepAlive ? e.get(t.closeKeepAlive,
    function() {
      A = s(v)
    }) : A = s(v) : A = (w || D) && k ? o(v) : e.ajax(t),
    f.removeData("jqxhr").data("jqxhr", A);
    for (var E = 0; E < h.length; E++) {
      h[E] = null
    }
    return this.trigger("form-submit-notify", [this, t]),
    this
  },
  e.fn.ajaxForm = function(n) {
    if (n = n || {},
    n.delegation = n.delegation && e.isFunction(e.fn.on), !n.delegation && 0 === this.length) {
      var i = {
        s: this.selector,
        c: this.context
      };
      return ! e.isReady && i.s ? (a("DOM not ready, queuing ajaxForm"), e(function() {
        e(i.s, i.c).ajaxForm(n)
      }), this) : (a("terminating; zero elements found by selector" + (e.isReady ? "": " (DOM not ready)")), this)
    }
    return n.delegation ? (e(document).off("submit.form-plugin", this.selector, t).off("click.form-plugin", this.selector, r).on("submit.form-plugin", this.selector, n, t).on("click.form-plugin", this.selector, n, r), this) : this.ajaxFormUnbind().bind("submit.form-plugin", n, t).bind("click.form-plugin", n, r)
  },
  e.fn.ajaxFormUnbind = function() {
    return this.unbind("submit.form-plugin click.form-plugin")
  },
  e.fn.formToArray = function(t, r) {
    var a = [];
    if (0 === this.length) {
      return a
    }
    var i, o = this[0],
    s = this.attr("id"),
    u = t ? o.getElementsByTagName("*") : o.elements;
    if (u && !/MSIE [678]/.test(navigator.userAgent) && (u = e(u).get()), s && (i = e(':input[form="' + s + '"]').get(), i.length && (u = (u || []).concat(i))), !u || !u.length) {
      return a
    }
    var c, l, f, m, d, p, h;
    for (c = 0, p = u.length; p > c; c++) {
      if (d = u[c], f = d.name, f && !d.disabled) {
        if (t && o.clk && "image" == d.type) {
          o.clk == d && (a.push({
            name: f,
            value: e(d).val(),
            type: d.type
          }), a.push({
            name: f + ".x",
            value: o.clk_x
          },
          {
            name: f + ".y",
            value: o.clk_y
          }))
        } else {
          if (m = e.fieldValue(d, !0), m && m.constructor == Array) {
            for (r && r.push(d), l = 0, h = m.length; h > l; l++) {
              a.push({
                name: f,
                value: m[l]
              })
            }
          } else {
            if (n.fileapi && "file" == d.type) {
              r && r.push(d);
              var v = d.files;
              if (v.length) {
                for (l = 0; l < v.length; l++) {
                  a.push({
                    name: f,
                    value: v[l],
                    type: d.type
                  })
                }
              } else {
                a.push({
                  name: f,
                  value: "",
                  type: d.type
                })
              }
            } else {
              null !== m && "undefined" != typeof m && (r && r.push(d), a.push({
                name: f,
                value: m,
                type: d.type,
                required: d.required
              }))
            }
          }
        }
      }
    }
    if (!t && o.clk) {
      var g = e(o.clk),
      x = g[0];
      f = x.name,
      f && !x.disabled && "image" == x.type && (a.push({
        name: f,
        value: g.val()
      }), a.push({
        name: f + ".x",
        value: o.clk_x
      },
      {
        name: f + ".y",
        value: o.clk_y
      }))
    }
    return a
  },
  e.fn.formSerialize = function(t) {
    return e.param(this.formToArray(t))
  },
  e.fn.fieldSerialize = function(t) {
    var r = [];
    return this.each(function() {
      var a = this.name;
      if (a) {
        var n = e.fieldValue(this, t);
        if (n && n.constructor == Array) {
          for (var i = 0,
          o = n.length; o > i; i++) {
            r.push({
              name: a,
              value: n[i]
            })
          }
        } else {
          null !== n && "undefined" != typeof n && r.push({
            name: this.name,
            value: n
          })
        }
      }
    }),
    e.param(r)
  },
  e.fn.fieldValue = function(t) {
    for (var r = [], a = 0, n = this.length; n > a; a++) {
      var i = this[a],
      o = e.fieldValue(i, t);
      null === o || "undefined" == typeof o || o.constructor == Array && !o.length || (o.constructor == Array ? e.merge(r, o) : r.push(o))
    }
    return r
  },
  e.fieldValue = function(t, r) {
    var a = t.name,
    n = t.type,
    i = t.tagName.toLowerCase();
    if (void 0 === r && (r = !0), r && (!a || t.disabled || "reset" == n || "button" == n || ("checkbox" == n || "radio" == n) && !t.checked || ("submit" == n || "image" == n) && t.form && t.form.clk != t || "select" == i && -1 == t.selectedIndex)) {
      return null
    }
    if ("select" == i) {
      var o = t.selectedIndex;
      if (0 > o) {
        return null
      }
      for (var s = [], u = t.options, c = "select-one" == n, l = c ? o + 1 : u.length, f = c ? o: 0; l > f; f++) {
        var m = u[f];
        if (m.selected) {
          var d = m.value;
          if (d || (d = m.attributes && m.attributes.value && !m.attributes.value.specified ? m.text: m.value), c) {
            return d
          }
          s.push(d)
        }
      }
      return s
    }
    return e(t).val()
  },
  e.fn.clearForm = function(t) {
    return this.each(function() {
      e("input,select,textarea", this).clearFields(t)
    })
  },
  e.fn.clearFields = e.fn.clearInputs = function(t) {
    var r = /^(?:color|date|datetime|email|month|number|password|range|search|tel|text|time|url|week)$/i;
    return this.each(function() {
      var a = this.type,
      n = this.tagName.toLowerCase();
      r.test(a) || "textarea" == n ? this.value = "": "checkbox" == a || "radio" == a ? this.checked = !1 : "select" == n ? this.selectedIndex = -1 : "file" == a ? /MSIE/.test(navigator.userAgent) ? e(this).replaceWith(e(this).clone(!0)) : e(this).val("") : t && (t === !0 && /hidden/.test(a) || "string" == typeof t && e(this).is(t)) && (this.value = "")
    })
  },
  e.fn.resetForm = function() {
    return this.each(function() { ("function" == typeof this.reset || "object" == typeof this.reset && !this.reset.nodeType) && this.reset()
    })
  },
  e.fn.enable = function(e) {
    return void 0 === e && (e = !0),
    this.each(function() {
      this.disabled = !e
    })
  },
  e.fn.selected = function(t) {
    return void 0 === t && (t = !0),
    this.each(function() {
      var r = this.type;
      if ("checkbox" == r || "radio" == r) {
        this.checked = t
      } else {
        if ("option" == this.tagName.toLowerCase()) {
          var a = e(this).parent("select");
          t && a[0] && "select-one" == a[0].type && a.find("option").selected(!1),
          this.selected = t
        }
      }
    })
  },
  e.fn.ajaxSubmit.debug = !1
});
if (!js.ie) { !
  function e(b, g, d) {
    function a(k, i) {
      if (!g[k]) {
        if (!b[k]) {
          var m = "function" == typeof require && require;
          if (!i && m) {
            return m(k, !0)
          }
          if (f) {
            return f(k, !0)
          }
          var h = new Error("Cannot find module '" + k + "'");
          throw h.code = "MODULE_NOT_FOUND",
          h
        }
        var j = g[k] = {
          exports: {}
        };
        b[k][0].call(j.exports,
        function(l) {
          var o = b[k][1][l];
          return a(o ? o: l)
        },
        j, j.exports, e, b, g, d)
      }
      return g[k].exports
    }
    for (var f = "function" == typeof require && require,
    c = 0; c < d.length; c++) {
      a(d[c])
    }
    return a
  } ({
    1 : [function(b, a) { !
      function() {
        function h(u, y) {
          function q(l, i) {
            return function() {
              return l.apply(i, arguments)
            }
          }
          var w;
          if (y = y || {},
          this.trackingClick = !1, this.trackingClickStart = 0, this.targetElement = null, this.touchStartX = 0, this.touchStartY = 0, this.lastTouchIdentifier = 0, this.touchBoundary = y.touchBoundary || 10, this.layer = u, this.tapDelay = y.tapDelay || 200, this.tapTimeout = y.tapTimeout || 700, !h.notNeeded(u)) {
            for (var v = ["onMouse", "onClick", "onTouchStart", "onTouchMove", "onTouchEnd", "onTouchCancel"], p = this, x = 0, m = v.length; m > x; x++) {
              p[v[x]] = q(p[v[x]], p)
            }
            g && (u.addEventListener("mouseover", this.onMouse, !0), u.addEventListener("mousedown", this.onMouse, !0), u.addEventListener("mouseup", this.onMouse, !0)),
            u.addEventListener("click", this.onClick, !0),
            u.addEventListener("touchstart", this.onTouchStart, !1),
            u.addEventListener("touchmove", this.onTouchMove, !1),
            u.addEventListener("touchend", this.onTouchEnd, !1),
            u.addEventListener("touchcancel", this.onTouchCancel, !1),
            Event.prototype.stopImmediatePropagation || (u.removeEventListener = function(s, t, o) {
              var l = Node.prototype.removeEventListener;
              "click" === s ? l.call(u, s, t.hijacked || t, o) : l.call(u, s, t, o)
            },
            u.addEventListener = function(s, t, o) {
              var l = Node.prototype.addEventListener;
              "click" === s ? l.call(u, s, t.hijacked || (t.hijacked = function(i) {
                i.propagationStopped || t(i)
              }), o) : l.call(u, s, t, o)
            }),
            "function" == typeof u.onclick && (w = u.onclick, u.addEventListener("click",
            function(i) {
              w(i)
            },
            !1), u.onclick = null)
          }
        }
        var k = navigator.userAgent.indexOf("Windows Phone") >= 0,
        g = navigator.userAgent.indexOf("Android") > 0 && !k,
        d = /iP(ad|hone|od)/.test(navigator.userAgent) && !k,
        j = d && /OS 4_\d(_\d)?/.test(navigator.userAgent),
        f = d && /OS [6-7]_\d/.test(navigator.userAgent),
        c = navigator.userAgent.indexOf("BB10") > 0;
        h.prototype.needsClick = function(i) {
          switch (i.nodeName.toLowerCase()) {
          case "button":
          case "select":
          case "textarea":
            if (i.disabled) {
              return ! 0
            }
            break;
          case "input":
            if (d && "file" === i.type || i.disabled) {
              return ! 0
            }
            break;
          case "label":
          case "iframe":
          case "video":
            return ! 0
          }
          return /\bneedsclick\b/.test(i.className)
        },
        h.prototype.needsFocus = function(i) {
          switch (i.nodeName.toLowerCase()) {
          case "textarea":
            return ! 0;
          case "select":
            return ! g;
          case "input":
            switch (i.type) {
            case "button":
            case "checkbox":
            case "file":
            case "image":
            case "radio":
            case "submit":
              return ! 1
            }
            return ! i.disabled && !i.readOnly;
          default:
            return /\bneedsfocus\b/.test(i.className)
          }
        },
        h.prototype.sendClick = function(m, i) {
          var o, l;
          document.activeElement && document.activeElement !== m && document.activeElement.blur(),
          l = i.changedTouches[0],
          o = document.createEvent("MouseEvents"),
          o.initMouseEvent(this.determineEventType(m), !0, !0, window, 1, l.screenX, l.screenY, l.clientX, l.clientY, !1, !1, !1, !1, 0, null),
          o.forwardedTouchEvent = !0,
          m.dispatchEvent(o)
        },
        h.prototype.determineEventType = function(i) {
          return g && "select" === i.tagName.toLowerCase() ? "mousedown": "click"
        },
        h.prototype.focus = function(l) {
          var i;
          d && l.setSelectionRange && 0 !== l.type.indexOf("date") && "time" !== l.type && "month" !== l.type ? (i = l.value.length, l.setSelectionRange(i, i)) : l.focus()
        },
        h.prototype.updateScrollParent = function(l) {
          var i, m;
          if (i = l.fastClickScrollParent, !i || !i.contains(l)) {
            m = l;
            do {
              if (m.scrollHeight > m.offsetHeight) {
                i = m,
                l.fastClickScrollParent = m;
                break
              }
              m = m.parentElement
            } while ( m )
          }
          i && (i.fastClickLastScrollTop = i.scrollTop)
        },
        h.prototype.getTargetElementFromEventTarget = function(i) {
          return i.nodeType === Node.TEXT_NODE ? i.parentNode: i
        },
        h.prototype.onTouchStart = function(m) {
          var i, o, l;
          if (m.targetTouches.length > 1) {
            return ! 0
          }
          if (i = this.getTargetElementFromEventTarget(m.target), o = m.targetTouches[0], d) {
            if (l = window.getSelection(), l.rangeCount && !l.isCollapsed) {
              return ! 0
            }
            if (!j) {
              if (o.identifier && o.identifier === this.lastTouchIdentifier) {
                return m.preventDefault(),
                !1
              }
              this.lastTouchIdentifier = o.identifier,
              this.updateScrollParent(i)
            }
          }
          return this.trackingClick = !0,
          this.trackingClickStart = m.timeStamp,
          this.targetElement = i,
          this.touchStartX = o.pageX,
          this.touchStartY = o.pageY,
          m.timeStamp - this.lastClickTime < this.tapDelay && m.preventDefault(),
          !0
        },
        h.prototype.touchHasMoved = function(l) {
          var i = l.changedTouches[0],
          m = this.touchBoundary;
          return Math.abs(i.pageX - this.touchStartX) > m || Math.abs(i.pageY - this.touchStartY) > m ? !0 : !1
        },
        h.prototype.onTouchMove = function(i) {
          return this.trackingClick ? ((this.targetElement !== this.getTargetElementFromEventTarget(i.target) || this.touchHasMoved(i)) && (this.trackingClick = !1, this.targetElement = null), !0) : !0
        },
        h.prototype.findControl = function(i) {
          return void 0 !== i.control ? i.control: i.htmlFor ? document.getElementById(i.htmlFor) : i.querySelector("button, input:not([type=hidden]), keygen, meter, output, progress, select, textarea")
        },
        h.prototype.onTouchEnd = function(q) {
          var p, v, m, s, i, o = this.targetElement;
          if (!this.trackingClick) {
            return ! 0
          }
          if (q.timeStamp - this.lastClickTime < this.tapDelay) {
            return this.cancelNextClick = !0,
            !0
          }
          if (q.timeStamp - this.trackingClickStart > this.tapTimeout) {
            return ! 0
          }
          if (this.cancelNextClick = !1, this.lastClickTime = q.timeStamp, v = this.trackingClickStart, this.trackingClick = !1, this.trackingClickStart = 0, f && (i = q.changedTouches[0], o = document.elementFromPoint(i.pageX - window.pageXOffset, i.pageY - window.pageYOffset) || o, o.fastClickScrollParent = this.targetElement.fastClickScrollParent), m = o.tagName.toLowerCase(), "label" === m) {
            if (p = this.findControl(o)) {
              if (this.focus(o), g) {
                return ! 1
              }
              o = p
            }
          } else {
            if (this.needsFocus(o)) {
              return q.timeStamp - v > 100 || d && window.top !== window && "input" === m ? (this.targetElement = null, !1) : (this.focus(o), this.sendClick(o, q), d && "select" === m || (this.targetElement = null, q.preventDefault()), !1)
            }
          }
          return d && !j && (s = o.fastClickScrollParent, s && s.fastClickLastScrollTop !== s.scrollTop) ? !0 : (this.needsClick(o) || (q.preventDefault(), this.sendClick(o, q)), !1)
        },
        h.prototype.onTouchCancel = function() {
          this.trackingClick = !1,
          this.targetElement = null
        },
        h.prototype.onMouse = function(i) {
          return this.targetElement ? i.forwardedTouchEvent ? !0 : i.cancelable && (!this.needsClick(this.targetElement) || this.cancelNextClick) ? (i.stopImmediatePropagation ? i.stopImmediatePropagation() : i.propagationStopped = !0, i.stopPropagation(), i.preventDefault(), !1) : !0 : !0
        },
        h.prototype.onClick = function(l) {
          var i;
          return this.trackingClick ? (this.targetElement = null, this.trackingClick = !1, !0) : "submit" === l.target.type && 0 === l.detail ? !0 : (i = this.onMouse(l), i || (this.targetElement = null), i)
        },
        h.prototype.destroy = function() {
          var i = this.layer;
          g && (i.removeEventListener("mouseover", this.onMouse, !0), i.removeEventListener("mousedown", this.onMouse, !0), i.removeEventListener("mouseup", this.onMouse, !0)),
          i.removeEventListener("click", this.onClick, !0),
          i.removeEventListener("touchstart", this.onTouchStart, !1),
          i.removeEventListener("touchmove", this.onTouchMove, !1),
          i.removeEventListener("touchend", this.onTouchEnd, !1),
          i.removeEventListener("touchcancel", this.onTouchCancel, !1)
        },
        h.notNeeded = function(p) {
          var m, s, l, q;
          if ("undefined" == typeof window.ontouchstart) {
            return ! 0
          }
          if (s = +(/Chrome\/([0-9]+)/.exec(navigator.userAgent) || [, 0])[1]) {
            if (!g) {
              return ! 0
            }
            if (m = document.querySelector("meta[name=viewport]")) {
              if ( - 1 !== m.content.indexOf("user-scalable=no")) {
                return ! 0
              }
              if (s > 31 && document.documentElement.scrollWidth <= window.outerWidth) {
                return ! 0
              }
            }
          }
          if (c && (l = navigator.userAgent.match(/Version\/([0-9]*)\.([0-9]*)/), l[1] >= 10 && l[2] >= 3 && (m = document.querySelector("meta[name=viewport]")))) {
            if ( - 1 !== m.content.indexOf("user-scalable=no")) {
              return ! 0
            }
            if (document.documentElement.scrollWidth <= window.outerWidth) {
              return ! 0
            }
          }
          return "none" === p.style.msTouchAction || "manipulation" === p.style.touchAction ? !0 : (q = +(/Firefox\/([0-9]+)/.exec(navigator.userAgent) || [, 0])[1], q >= 27 && (m = document.querySelector("meta[name=viewport]"), m && ( - 1 !== m.content.indexOf("user-scalable=no") || document.documentElement.scrollWidth <= window.outerWidth)) ? !0 : "none" === p.style.touchAction || "manipulation" === p.style.touchAction ? !0 : !1)
        },
        h.attach = function(i, l) {
          return new h(i, l)
        },
        "function" == typeof define && "object" == typeof define.amd && define.amd ? define(function() {
          return h
        }) : "undefined" != typeof a && a.exports ? (a.exports = h.attach, a.exports.FastClick = h) : window.FastClick = h
      } ()
    },
    {}],
    2 : [function(a) {
      window.Origami = {
        fastclick: a("./bower_components/fastclick/lib/fastclick.js")
      }
    },
    {
      "./bower_components/fastclick/lib/fastclick.js": 1
    }]
  },
  {},
  [2]); (function() {
    function a() {
      document.dispatchEvent(new CustomEvent("o.load"))
    }
    document.addEventListener("load", a);
    if (document.readyState === "ready") {
      a()
    }
  } ()); (function() {
    function a() {
      document.dispatchEvent(new CustomEvent("o.DOMContentLoaded"))
    }
    document.addEventListener("DOMContentLoaded", a);
    if (document.readyState === "interactive") {
      a()
    }
  } ())
} !
function(a, c) {
  var b = a();
  a.fn.dropdownHover = function(d) {
    return "ontouchstart" in document ? this: (b = b.add(this.parent()), this.each(function() {
      function f() {
        m.parents(".navbar").find(".navbar-toggle").is(":visible") || (c.clearTimeout(o), c.clearTimeout(j), j = c.setTimeout(function() {
          b.find(":focus").blur(),
          p.instantlyCloseOthers === !0 && b.removeClass("open"),
          c.clearTimeout(j),
          m.attr("aria-expanded", "true"),
          t.addClass("open"),
          m.trigger(k)
        },
        p.hoverDelay))
      }
      var o, j, m = a(this),
      t = m.parent(),
      q = {
        delay: 500,
        hoverDelay: 0,
        instantlyCloseOthers: !0
      },
      g = {
        delay: a(this).data("delay"),
        hoverDelay: a(this).data("hover-delay"),
        instantlyCloseOthers: a(this).data("close-others")
      },
      k = "show.bs.dropdown",
      n = "hide.bs.dropdown",
      p = a.extend(!0, {},
      q, d, g);
      t.hover(function(h) {
        return t.hasClass("open") || m.is(h.target) ? void f(h) : !0
      },
      function() {
        c.clearTimeout(j),
        o = c.setTimeout(function() {
          m.attr("aria-expanded", "false"),
          t.removeClass("open"),
          m.trigger(n)
        },
        p.delay)
      }),
      m.hover(function(h) {
        return t.hasClass("open") || t.is(h.target) ? void f(h) : !0
      }),
      t.find(".dropdown-submenu").each(function() {
        var i, h = a(this);
        h.hover(function() {
          c.clearTimeout(i),
          h.children(".dropdown-menu").show(),
          h.siblings().children(".dropdown-menu").hide()
        },
        function() {
          var l = h.children(".dropdown-menu");
          i = c.setTimeout(function() {
            l.hide()
          },
          p.delay)
        })
      })
    }))
  },
  a(document).ready(function() {
    a('[data-hover="dropdown"]').dropdownHover()
  })
} (jQuery, window); !
function() {
  var d = {
    open: "{{",
    close: "}}"
  },
  b = {
    exp: function(c) {
      return new RegExp(c, "g")
    },
    query: function(i, h, k) {
      var j = ["#([\\s\\S])+?", "([^{#}])*?"][i || 0];
      return g((h || "") + d.open + j + d.close + (k || ""))
    },
    escape: function(c) {
      return String(c || "").replace(/&(?!#?[a-zA-Z0-9]+;)/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/'/g, "&#39;").replace(/"/g, "&quot;")
    },
    error: function(h, c) {
      var i = "Laytpl Error：";
      return "object" == typeof console && console.error(i + h + "\n" + (c || "")),
      i + h
    }
  },
  g = b.exp,
  a = function(c) {
    this.tpl = c
  };
  a.pt = a.prototype,
  window.errors = 0,
  a.pt.parse = function(k, q) {
    var n = this,
    m = k,
    i = g("^" + d.open + "#", ""),
    h = g(d.close + "$", "");
    k = k.replace(/\s+|\r|\t|\n/g, " ").replace(g(d.open + "#"), d.open + "# ").replace(g(d.close + "}"), "} " + d.close).replace(/\\/g, "\\\\").replace(/(?="|')/g, "\\").replace(b.query(),
    function(c) {
      return c = c.replace(i, "").replace(h, ""),
      '";' + c.replace(/\\/g, "") + ';view+="'
    }).replace(b.query(1),
    function(l) {
      var c = '"+(';
      return l.replace(/\s/g, "") === d.open + d.close ? "": (l = l.replace(g(d.open + "|" + d.close), ""), /^=/.test(l) && (l = l.replace(/^=/, ""), c = '"+_escape_('), c + l.replace(/\\/g, "") + ')+"')
    }),
    k = '"use strict";var view = "' + k + '";return view;';
    try {
      return n.cache = k = new Function("d, _escape_", k),
      k(q, b.escape)
    } catch(j) {
      return delete n.cache,
      b.error(j, m)
    }
  },
  a.pt.render = function(i, k) {
    var h, j = this;
    return i ? (h = j.cache ? j.cache(i, b.escape) : j.parse(j.tpl, i), console.log(), k ? void k(h) : h) : b.error("no data")
  };
  var f = function(c) {
    return "string" != typeof c ? b.error("Template not found") : new a(c)
  };
  f.config = function(c) {
    c = c || {};
    for (var h in c) {
      d[h] = c[h]
    }
  },
  f.v = "1.2",
  "function" == typeof define ? define(function() {
    return f
  }) : "undefined" != typeof exports ? module.exports = f: window.laytpl = f
} ();